import { toLogin } from "@/router";
import axios from "axios";

// 1、创建一个新的axios对象：
const instance = axios.create({
    // 2、设置基础路径：
    baseURL: import.meta.env.VITE_BASE_URL,

    // 3、请求超时配置：
    timeout: 5000,
})

// 请求拦截器：
instance.interceptors.request.use((config) => {
    // 拦截请求，把本地存储中的token取出来，添加到请求的headers(请求头)中
    config.headers.Authorization = localStorage.admin_token;
    // 让 请求头中 带有token参数的请求 继续发往后端
    return config;
});

// 4、响应拦截器配置
instance.interceptors.response.use((res) => {
    // 拦截成功 进这里：
    return res.data;
}, (err) => {
    // 响应失败 进这里：
    if (err?.response?.status == 401) {
        ElMessageBox.alert('登录已过期，请重新登录', '提示', {
            confirmButtonText: '确认',
            // 弹窗关闭 就会进callback回调函数
            callback: () => {
                toLogin();
            },
        })
    }
    // 因为我们在这里拦截了报错，处理了 401 错误，但没处理其他错 如：500等；
    // 所以对于其他报错，要让它继续在浏览器控制台以红色报错形式显示
    return Promise.reject(err.message);
})

// 5、把私有的instance暴露出去，给其他文件引入使用
export default instance;
